/**
 * 701. 二叉搜索树中的插入操作
 * https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/
 */
public class Solutions_701 {
    public static void main(String[] args) {
        TreeNode root = new TreeNode(4);
        root.left = new TreeNode(2);
        root.left.left = new TreeNode(1);
        root.left.right = new TreeNode(3);
        root.right = new TreeNode(7);
        int val = 5;  // output: {4, 2, 7, 1, 3, 5}

        TreeNode result = insertIntoBST(root, val);
        System.out.println(result);
    }

    /**
     * 递归 + 模拟
     */
    public static TreeNode insertIntoBST(TreeNode root, int val) {
        if (root == null) {
            // 创建值为 val 的节点，返回给上层
            return new TreeNode(val);
        }
        if (val < root.val) {
            // val 小于根节点值，那么 val 一定在 root 左边
            root.left = insertIntoBST(root.left, val);
        } else if (val > root.val) {
            // val 大于根节点值，那么 val 一定在 root 右边
            root.right = insertIntoBST(root.right, val);
        }
        // 返回根节点
        return root;
    }
}
